<?php

/**
 * @Description    菜单(规则)模型
 * @Author         songgy <Email:songgy@liuniukeji.com> zhaojiping@2022/1/20
 * @Copyright      山东艾思软件科技有限公司(https://www.aisisofit.cn)
 * @Date           2019/2/22
 * @CreateBy       PhpStorm
 */

namespace app\core\model;

use think\Model;
use think\facade\Db;

class CoreRule extends \app\common\model\CommonModel {
    protected $order = 'sort, id'; // 排序字段
    protected $fields = 'id, icon, pid, name, title, remark, is_menu, usable, sort, is_system';

    public static function onBeforeUpdate($row) {
        parent::onBeforeUpdate($row);

        if ($row['id'] == $row['pid'])
            json_return(0, '菜单的父类不能是本身, 请重新选择');
    }

    public static function onBeforeDelete($row) {
        parent::onBeforeDelete($row);

        $result = self::where('pid', 'in', $row['id'])->count();
        if ($result > 0)
            json_return(0, '当父菜单下面有子菜单, 父菜单不能删除, 请先删除子菜单');
    }

    /**
     * 获取查询条件的规则, 过滤掉用户角色没有的权限, 返回树型结果
     */
    public function getUserRoleMenuTree($where = []) {
        $menu_list = $this->getList($where);
        if (UID != 1) { // 除超级管理员外, 其它用户要判断权限
            $res = Db::name('CoreRole')->where(['id' => ROLE_ID])->find();
            if ($res['rules']) {
                $rules_array = explode(',', $res['rules']);
                foreach ($menu_list as $key => $value) {
                    if (!in_array($value['id'], $rules_array))
                        unset($menu_list[$key]);
                }
            }
        }
        $result = $this->getTree($menu_list); // 生成树型结构 方法在父类中

        return $result;
    }
}
